<?php
    // +----------------------------------------------------------------------
    // | 开发团队信息
    // +----------------------------------------------------------------------
    // | Copyright (c) 2015-2024 http://www.yicmf.com, All rights reserved.
    // +----------------------------------------------------------------------
    // | Author: 微尘 <yicmf@qq.com>
    // +----------------------------------------------------------------------
    namespace addon\qcloud_sms;

    use think\Exception;

    class Ucpaas
    {
        //API请求地址
        const BaseUrl = "https://open.ucpaas.com/ol/sms/";

        //开发者账号ID。由32个英文字母和阿拉伯数字组成的开发者账号唯一标识符。
        private $accountSid;

        //开发者账号TOKEN
        private $token;

        public function __construct($options)
        {
            if (is_array($options) && !empty($options)) {
                $this->accountSid = isset($options['accountsid']) ? $options['accountsid'] : '';
                $this->token = isset($options['token']) ? $options['token'] : '';
            } else {
                throw new Exception("非法参数");
            }
        }

        private function getResult($url, $body = null, $method)
        {
            $data = $this->connection($url, $body, $method);
            if (isset($data) && !empty($data)) {
                $result = json_decode($data,true) ;
            } else {
                $result = '没有返回数据';
            }
            return $result;
        }

        /**
         * @param $url    请求链接
         * @param $body   post数据
         * @param $method post或get
         * @return mixed|string
         */
        private function connection($url, $body, $method)
        {
            if (function_exists("curl_init")) {
                $header = [
                    'Accept:application/json',
                    'Content-Type:application/json;charset=utf-8',
                ];
                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
                if ($method == 'post') {
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
                }
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                $result = curl_exec($ch);
                curl_close($ch);
            } else {
                $opts = [];
                $opts['http'] = [];
                $headers = [
                    "method" => strtoupper($method),
                ];
                $headers[] = 'Accept:application/json';
                $headers['header'] = [];
                $headers['header'][] = 'Content-Type:application/json;charset=utf-8';
                if (!empty($body)) {
                    $headers['header'][] = 'Content-Length:' . strlen($body);
                    $headers['content'] = $body;
                }
                $opts['http'] = $headers;
                $result = file_get_contents($url, false, stream_context_create($opts));
            }
            return $result;
        }

        /**
         * 单条发送短信的function，适用于注册/找回密码/认证/操作提醒等单个用户单条短信的发送场景
         * @param      $appid        应用ID
         * @param      $mobile       接收短信的手机号码
         * @param      $templateid   短信模板，可在后台短信产品→选择接入的应用→短信模板-模板ID，查看该模板ID
         * @param null $param 变量参数，多个参数使用英文逗号隔开（如：param=“a,b,c”）
         * @param   string|null   $uid            用于贵司标识短信的参数，按需选填。
         * @return mixed|string
         * @throws Exception
         */
        public function sendSms($appid, $templateid, $param = null, $mobile, $uid='')
        {
            $url = self::BaseUrl . 'sendsms';
            $body_json = [
                'sid' => $this->accountSid,
                'token' => $this->token,
                'appid' => $appid,
                'templateid' => $templateid,
                'param' => $param,
                'mobile' => $mobile,
                'uid' => $uid,
            ];
            return $this->getResult($url, json_encode($body_json), 'post');
        }

        /**
         * 群发送短信的function，适用于运营/告警/批量通知等多用户的发送场景
         * @param      $appid        应用ID
         * @param      $mobileList   接收短信的手机号码，多个号码将用英文逗号隔开，如“18088888888,15055555555,13100000000”
         * @param      $templateid   短信模板，可在后台短信产品→选择接入的应用→短信模板-模板ID，查看该模板ID
         * @param null $param 变量参数，多个参数使用英文逗号隔开（如：param=“a,b,c”）
         * @param      $uid            用于贵司标识短信的参数，按需选填。
         * @return mixed|string
         * @throws Exception
         */
        public function SendSms_Batch($appid, $templateid, $param = null, $mobileList, $uid)
        {
            $url = self::BaseUrl . 'sendsms_batch';
            $body_json = [
                'sid' => $this->accountSid,
                'token' => $this->token,
                'appid' => $appid,
                'templateid' => $templateid,
                'param' => $param,
                'mobile' => $mobileList,
                'uid' => $uid,
            ];
            $body = json_encode($body_json);
            $data = $this->getResult($url, $body, 'post');
            return $data;
        }
    }